package com.neusoft.databus.common.pool;

import com.neusoft.databus.common.connection.AbstractConnection;

/**
 * 连接池连接器
 *
 * @author sunchf
 * @date 2018年12月13日 下午2:43:17
 */
public interface Connector<T> {
    /**
     * 根据连接配置信息获取连接
     *
     * @param connection
     * @return
     * @throws Exception
     */
    T getConn(AbstractConnection connection) throws Exception;

    /**
     * 根据连接配置信息和超时时间获取连接
     *
     * @param connection
     * @param timeout
     * @return
     * @throws Exception
     */
    T getConn(AbstractConnection connection, int timeout) throws Exception;

    /**
     * 归还连接
     *
     * @param connection
     * @param conn
     */
    void returnConn(AbstractConnection connection, T conn);

    /**
     * 当连接在运行过程中发现无效，销毁
     *
     * @param connection
     * @param conn
     */
    void invalidateConn(AbstractConnection connection, T conn);

    /**
     * 移除所有空闲池连接对象，如果想彻底清空，要确保没有等候线程，没有使用中的线程
     *
     * @param connection
     */
    void removeAllConns(AbstractConnection connection);

}
